package aceim.app.utils; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import aceim.api.dataentity.ActionFeature; import aceim.api.dataentity.Buddy; import aceim.api.dataentity.BuddyGroup; import aceim.api.dataentity.FileMessage; import aceim.api.dataentity.InputFormFeature; import aceim.api.dataentity.ListFeature; import aceim.api.dataentity.Message; import aceim.api.dataentity.MultiChatRoom; import aceim.api.dataentity.OnlineInfo; import aceim.api.dataentity.ProtocolServiceFeature; import aceim.api.dataentity.ProtocolServiceFeatureTarget; import aceim.api.dataentity.ToggleFeature; import aceim.api.service.ApiConstants; import aceim.api.utils.Logger; import aceim.app.AceImException; import aceim.app.MainActivity; import aceim.app.R; import aceim.app.dataentity.Account; import aceim.app.dataentity.ProtocolResources; import aceim.app.service.ServiceUtils; import aceim.app.view.page.Page; import aceim.app.widgets.adapters.FileTransferRequestAdapter; import aceim.app.widgets.adapters.IconTitleAdapter; import aceim.app.widgets.adapters.IconTitleAdapter.IconTitleItem; import android.app.AlertDialog; import android.app.Dialog; import android.content.DialogInterface; import android.content.DialogInterface.OnCancelListener; import android.content.DialogInterface.OnClickListener; import android.content.res.Resources; import android.content.res.TypedArray; import android.os.Bundle; import android.os.RemoteException; import android.text.TextUtils; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.view.ViewGroup.LayoutParams; import android.widget.AdapterView; import android.widget.AdapterView.OnItemClickListener; import android.widget.ArrayAdapter; import android.widget.EditText; import android.widget.GridView; import android.widget.ListView; import android.widget.Spinner; import com.androidquery.AQuery; public final class DialogUtils { private static final Map<Long, Dialog> sFileTransferDialogs = new HashMap<Long, Dialog>(); private DialogUtils() {} public static void showBrandedDialog(Dialog dialog) { dialog.show(); // This seems to be the only way to set custom background to a dialog // content. I'm really sorry :( View message = dialog.getWindow().findViewById(android.R.id.message); if (message != null) { message.setBackgroundResource(R.drawable.cornered_background_small); } } public static void showFileMessageDialog(final FileMessage message, Buddy buddy, final MainActivity activity) { showAcceptDeclineDialog(message, buddy, activity); } public static void showEditListFeatureDialog(final MainActivity activity, final OnlineInfo info, ProtocolResources protocolResources, final ListFeature feature) { final AlertDialog.Builder builder = new AlertDialog.Builder(activity); builder.setTitle(feature.getFeatureName()); final OnlineInfo tmp = new OnlineInfo(info.getServiceId(), info.getProtocolUid()); View view = LayoutInflater.from(activity).inflate(R.layout.list_feature_dialog, null); final GridView grid = (GridView) view.findViewById(R.id.grid); final EditText titleEditor = (EditText) view.findViewById(android.R.id.text1); final EditText textEditor = (EditText) view.findViewById(android.R.id.text2); if (feature.getFeatureId().equals(ApiConstants.FEATURE_XSTATUS)) { titleEditor.setVisibility(View.VISIBLE); textEditor.setVisibility(View.VISIBLE); titleEditor.setText(info.getXstatusName()); textEditor.setText(info.getXstatusDescription()); } if (feature.getDrawables() != null && feature.getNames() != null) { //grid.setColumnWidth(activity.getResources().getDimensionPixelSize(R.dimen.smiley_column_width)); final IconTitleAdapter adapter; try { adapter = IconTitleAdapter.fromListFeature(activity, R.layout.status_item, protocolResources, feature); grid.setAdapter(adapter); } catch (AceImException e) { Logger.log(e); return; } grid.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { if (position < 0 || position >= adapter.getCount()) { return; } IconTitleItem item = adapter.getItem(position); if (feature.getFeatureId().equals(ApiConstants.FEATURE_XSTATUS)) { String currentTitle = titleEditor.getText().toString().trim(); if (TextUtils.isEmpty(currentTitle) || currentTitle.equals(adapter.getItem(tmp.getFeatures().getByte(feature.getFeatureId()) + 1).getTitle())) { titleEditor.setText(item.getTitle()); } } adapter.setSelectedItem(position); adapter.notifyDataSetChanged(); tmp.getFeatures().putByte(feature.getFeatureId(), (byte) (feature.isNullable() ? position - 1 : position)); } }); grid.setAdapter(adapter); tmp.getFeatures().putByte(feature.getFeatureId(), info.getFeatures().getByte(feature.getFeatureId(), (byte) (feature.isNullable() ? -1 : 0))); } else { grid.setVisibility(View.GONE); } builder.setPositiveButton(android.R.string.ok, new OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { try { byte value = tmp.getFeatures().getByte(feature.getFeatureId()); info.getFeatures().putByte(feature.getFeatureId(), value); if (feature.getFeatureId().equals(ApiConstants.FEATURE_XSTATUS)) { if (value > -1) { info.setXstatusName(titleEditor.getText().toString().trim()); info.setXstatusDescription(textEditor.getText().toString().trim()); } else { info.setXstatusName(null); info.setXstatusDescription(null); } } activity.getCoreService().setFeature(feature.getFeatureId(), info); } catch (RemoteException e) { activity.onRemoteException(e); } } }); builder.setNegativeButton(android.R.string.cancel, new OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { dialog.dismiss(); } }); builder.setView(view); showBrandedDialog(builder.create()); if (feature.getDrawables() != null && feature.getNames() != null) { byte currentValue = info.getFeatures().getByte(feature.getFeatureId()); grid.performItemClick(null, feature.isNullable() ? currentValue + 1 : currentValue, 0); } } public static void buddyGroupContextMenu(final MainActivity mainActivity, final Account account, final BuddyGroup group, final ProtocolResources protocolResources) { boolean groupManagementAllowed = account.getOnlineInfo().getFeatures().getBoolean(ApiConstants.FEATURE_GROUP_MANAGEMENT, false); if (!groupManagementAllowed) { //TODO fix for group-specific features (later, when available) return; } final Dialog dialog = new Dialog(mainActivity); dialog.setTitle(mainActivity.getString(R.string.contact_menu, group.getName())); ListView list = new ListView(mainActivity); int pad = mainActivity.getResources().getDimensionPixelSize(R.dimen.default_padding); list.setPadding(pad, 0, pad, 0); TypedArray items = mainActivity.getResources().obtainTypedArray(R.array.group_menu_names); final List<IconTitleItem> itemList = new ArrayList<IconTitleItem>(); for (int i = 0; i < items.length(); i++){ String item = items.getString(i); IconTitleItem t = new IconTitleItem(); t.setTitle(item); itemList.add(t); } items.recycle(); /*Resources r; try { r = protocolResources.getNativeResourcesForProtocol(null); } catch (AceImException e) { Logger.log(e); return; }*/ for (ProtocolServiceFeature feature : protocolResources.getFeatures()) { if (!feature.isEditable() || !feature.isAppliedToTarget(ProtocolServiceFeatureTarget.GROUP)) { continue; } String item; item = feature.getFeatureName(); IconTitleItem t = new IconTitleItem(); t.setTitle(item); t.setId(feature.getFeatureId()); itemList.add(t); } final IconTitleAdapter adapter = new IconTitleAdapter(mainActivity, android.R.layout.simple_list_item_1, android.R.id.text1, itemList, new ListView.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT)); list.setAdapter(adapter); list.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { IconTitleItem item = adapter.getItem(position); String name = item.getTitle(); if (name.equals(mainActivity.getString(R.string.menu_value_add_group))) { showAddOrRenameGroupDialog(null, account, mainActivity); } else if (name.equals(mainActivity.getString(R.string.menu_value_rename))) { showAddOrRenameGroupDialog(group, account, mainActivity); } else if (name.equals(mainActivity.getString(R.string.menu_value_delete_group))) { showConfirmRemoveGroupDialog(group, mainActivity); } dialog.dismiss(); } }); dialog.addContentView(list, new android.view.ViewGroup.LayoutParams(android.view.ViewGroup.LayoutParams.WRAP_CONTENT, android.view.ViewGroup.LayoutParams.WRAP_CONTENT)); dialog.setCancelable(true); DialogUtils.showBrandedDialog(dialog); } public static void buddyContextMenu(final MainActivity mainActivity, final Account account, final Buddy buddy, final ProtocolResources protocolResources) { final Dialog dialog = new Dialog(mainActivity); dialog.setTitle(mainActivity.getString(R.string.contact_menu, buddy.getSafeName())); ListView list = new ListView(mainActivity); int pad = mainActivity.getResources().getDimensionPixelSize(R.dimen.default_padding); list.setPadding(pad, 0, pad, 0); TypedArray items = mainActivity.getResources().obtainTypedArray(R.array.contact_menu_names); boolean buddyManagementAllowed = account.getOnlineInfo().getFeatures().getBoolean(ApiConstants.FEATURE_BUDDY_MANAGEMENT, false); final List<IconTitleItem> itemList = new ArrayList<IconTitleItem>(); for (int i = 0; i < items.length(); i++) { String item = items.getString(i); if (item.equals(mainActivity.getString(R.string.menu_value_add_to_list))) { if ((buddy instanceof MultiChatRoom) ||buddy.getGroupId() != ApiConstants.NOT_IN_LIST_GROUP_ID) { continue; } } if (item.equals(mainActivity.getString(R.string.menu_value_move))) { if ((buddy instanceof MultiChatRoom) ||!buddyManagementAllowed || buddy.getGroupId() == ApiConstants.NOT_IN_LIST_GROUP_ID || !hasGroupsToMove(buddy, account)) { continue; } } if (item.equals(mainActivity.getString(R.string.menu_value_rename))) { if ((buddy instanceof MultiChatRoom) ||!buddyManagementAllowed || buddy.getGroupId() == ApiConstants.NOT_IN_LIST_GROUP_ID) { continue; } } if (item.equals(mainActivity.getString(R.string.menu_value_add_to_list))) { if ((buddy instanceof MultiChatRoom) ||!buddyManagementAllowed || buddy.getGroupId() != ApiConstants.NOT_IN_LIST_GROUP_ID) { continue; } } if (item.equals(mainActivity.getString(R.string.menu_value_join_chat))) { if (!(buddy instanceof MultiChatRoom) || buddy.getOnlineInfo().getFeatures().getByte(ApiConstants.FEATURE_STATUS, (byte) -1) > -1) { continue; } } if (item.equals(mainActivity.getString(R.string.menu_value_leave_chat))) { if (!(buddy instanceof MultiChatRoom) || buddy.getOnlineInfo().getFeatures().getByte(ApiConstants.FEATURE_STATUS, (byte) -1) < 0) { continue; } } if (item.equals(mainActivity.getString(R.string.menu_value_delete_contact))) { if (!(buddy instanceof MultiChatRoom) && !buddyManagementAllowed) { continue; } } IconTitleItem t = new IconTitleItem(); t.setTitle(item); itemList.add(t); } items.recycle(); Resources r; try { r = protocolResources.getNativeResourcesForProtocol(null); } catch (AceImException e) { Logger.log(e); return; } Bundle buddyFeatures = buddy.getOnlineInfo().getFeatures(); for (String featureId : buddy.getOnlineInfo().getFeatures().keySet()) { ProtocolServiceFeature feature = protocolResources.getFeature(featureId); if (feature == null || !feature.isEditable() || !feature.isAppliedToTarget(ProtocolServiceFeatureTarget.BUDDY)) { continue; } String item; if (feature instanceof ListFeature){ ListFeature lf = (ListFeature) feature; byte value = buddyFeatures.getByte(feature.getFeatureId(), (byte) -1); if (value > -1) { item = r.getString(lf.getNames()[value]); } else { item = feature.getFeatureName(); } } else { item = feature.getFeatureName(); } IconTitleItem t = new IconTitleItem(); t.setTitle(item); t.setId(feature.getFeatureId()); itemList.add(t); } final IconTitleAdapter adapter = new IconTitleAdapter(mainActivity, android.R.layout.simple_list_item_1, android.R.id.text1, itemList, new ListView.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT)); list.setAdapter(adapter); list.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { IconTitleItem item = adapter.getItem(position); try { if (item.getId() != null) { ProtocolServiceFeature f = protocolResources.getFeature(item.getId()); if (f instanceof ListFeature) { showEditListFeatureDialog(mainActivity, buddy.getOnlineInfo(), protocolResources, (ListFeature)f); } else if (f instanceof InputFormFeature) { Page.getInputFormPage(mainActivity, (InputFormFeature) f, buddy.getOnlineInfo(), protocolResources); } else if (f instanceof ToggleFeature) { OnlineInfo info = buddy.getOnlineInfo(); info.getFeatures().putBoolean(f.getFeatureId(), !info.getFeatures().getBoolean(f.getFeatureId(), ((ToggleFeature) f).getValue())); mainActivity.getCoreService().setFeature(f.getFeatureId(), info); } else if (f instanceof ActionFeature) { mainActivity.getCoreService().setFeature(f.getFeatureId(), buddy.getOnlineInfo()); } else { ViewUtils.showAlertToast(mainActivity, android.R.drawable.ic_menu_info_details, R.string.unknown_command, item.getId()); } } else { String name = item.getTitle(); if (name.equals(mainActivity.getString(R.string.menu_value_view_info))) { mainActivity.getCoreService().requestBuddyFullInfo(buddy.getServiceId(), buddy.getProtocolUid()); } else if (name.equals(mainActivity.getString(R.string.menu_value_add_to_list))) { showAddBuddyDialog(buddy, account, mainActivity); } else if (name.equals(mainActivity.getString(R.string.menu_value_rename))) { showBuddyRenameDialog(buddy, mainActivity); } else if (name.equals(mainActivity.getString(R.string.menu_value_delete_contact))) { showConfirmRemoveBuddyDialog(buddy, mainActivity); } else if (name.equals(mainActivity.getString(R.string.menu_value_move))) { showBuddyMoveDialog(buddy, account, mainActivity); } else if (name.equals(mainActivity.getString(R.string.menu_value_join_chat))) { mainActivity.getCoreService().joinChat(buddy.getServiceId(), buddy.getProtocolUid()); } else if (name.equals(mainActivity.getString(R.string.menu_value_leave_chat))) { mainActivity.getCoreService().leaveChat(buddy.getServiceId(), buddy.getProtocolUid()); } else { ViewUtils.showAlertToast(mainActivity, android.R.drawable.ic_menu_info_details, R.string.unknown_command, name); } } } catch (RemoteException e) { mainActivity.onRemoteException(e); } dialog.dismiss(); } }); dialog.addContentView(list, new android.view.ViewGroup.LayoutParams(android.view.ViewGroup.LayoutParams.WRAP_CONTENT, android.view.ViewGroup.LayoutParams.WRAP_CONTENT)); dialog.setCancelable(true); DialogUtils.showBrandedDialog(dialog); } public static final void showBuddyRenameDialog(final Buddy buddy, final MainActivity activity) { AlertDialog.Builder builder = new AlertDialog.Builder(activity); final EditText editor = new EditText(activity); editor.setLayoutParams(new ViewGroup.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT)); builder.setTitle(activity.getString(R.string.rename_X, buddy.getSafeName())); builder.setView(editor); editor.setText(buddy.getName()); builder.setPositiveButton(android.R.string.ok, new OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { String text = editor.getText().toString().trim(); if (TextUtils.isEmpty(text)) { //showAlertToast(activity, android.R.drawable.ic_dialog_alert, R.string., params); } else { if (!text.equals(buddy.getName())) { try { Buddy clone = ServiceUtils.cloneBuddy(buddy); clone.setName(text); activity.getCoreService().renameBuddy(clone); } catch (RemoteException e) { activity.onRemoteException(e); } } } dialog.dismiss(); } }); builder.setNegativeButton(android.R.string.cancel, new OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { dialog.dismiss(); } }); showBrandedDialog(builder.create()); } public static void showConfirmRemoveBuddyDialog(final Buddy buddy, final MainActivity mainActivity) { AlertDialog.Builder builder = new AlertDialog.Builder(mainActivity); builder.setTitle(R.string.confirm_delete); builder.setMessage(mainActivity.getString(R.string.are_you_sure_you_want_to_remove, buddy.getSafeName())); builder.setPositiveButton(android.R.string.ok, new OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { try { mainActivity.getCoreService().removeBuddy(buddy); } catch (RemoteException e) { mainActivity.onRemoteException(e); } dialog.dismiss(); } }); builder.setNegativeButton(android.R.string.cancel, new OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { dialog.dismiss(); } }); showBrandedDialog(builder.create()); } public static void showBuddyMoveDialog(final Buddy buddy, Account account, final MainActivity mainActivity) { AlertDialog.Builder builder = new AlertDialog.Builder(mainActivity); builder.setTitle(mainActivity.getString(R.string.move_X, buddy.getSafeName())); final Spinner spinner = new Spinner(mainActivity); ArrayAdapter<BuddyGroup> adapter = new ArrayAdapter<BuddyGroup>(mainActivity, android.R.layout.simple_spinner_item, android.R.id.text1, account.getBuddyGroupList()); adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); spinner.setAdapter(adapter); builder.setView(spinner); for (int i=0; i<adapter.getCount(); i++) { if (buddy.getGroupId().equals(adapter.getItem(i).getId())) { spinner.setSelection(i); break; } } builder.setPositiveButton(android.R.string.ok, new OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { Buddy clone = ServiceUtils.cloneBuddy(buddy); clone.setGroupId(((BuddyGroup)spinner.getSelectedItem()).getId()); try { mainActivity.getCoreService().moveBuddy(clone); } catch (RemoteException e) { mainActivity.onRemoteException(e); } dialog.dismiss(); } }); builder.setNegativeButton(android.R.string.cancel, new OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { dialog.dismiss(); } }); showBrandedDialog(builder.create()); } public static void showAddBuddyDialog(final Buddy buddy, Account account, final MainActivity mainActivity) { AlertDialog.Builder builder = new AlertDialog.Builder(mainActivity); builder.setTitle(mainActivity.getString(R.string.add_X, buddy.getSafeName())); final Spinner spinner = new Spinner(mainActivity); ArrayAdapter<BuddyGroup> adapter = new ArrayAdapter<BuddyGroup>(mainActivity, android.R.layout.simple_spinner_item, android.R.id.text1, account.getBuddyGroupList()); adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); spinner.setAdapter(adapter); builder.setView(spinner); builder.setPositiveButton(android.R.string.ok, new OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { Buddy clone = ServiceUtils.cloneBuddy(buddy); clone.setGroupId(((BuddyGroup)spinner.getSelectedItem()).getId()); try { mainActivity.getCoreService().addBuddy(clone); } catch (RemoteException e) { mainActivity.onRemoteException(e); } dialog.dismiss(); } }); builder.setNegativeButton(android.R.string.cancel, new OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { dialog.dismiss(); } }); showBrandedDialog(builder.create()); } public static void showConfirmRemoveGroupDialog(final BuddyGroup group, final MainActivity mainActivity) { AlertDialog.Builder builder = new AlertDialog.Builder(mainActivity); builder.setTitle(R.string.confirm_delete); builder.setMessage(mainActivity.getString(R.string.are_you_sure_you_want_to_remove, group.getName())); builder.setPositiveButton(android.R.string.ok, new OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { try { mainActivity.getCoreService().removeGroup(group);; } catch (RemoteException e) { mainActivity.onRemoteException(e); } dialog.dismiss(); } }); builder.setNegativeButton(android.R.string.cancel, new OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { dialog.dismiss(); } }); showBrandedDialog(builder.create()); } public static void showAddOrRenameGroupDialog(final BuddyGroup group, final Account account, final MainActivity mainActivity) { AlertDialog.Builder builder = new AlertDialog.Builder(mainActivity); builder.setTitle(mainActivity.getString(R.string.add_group)); final EditText editor = new EditText(mainActivity); editor.setLayoutParams(new ViewGroup.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT)); if (group != null) { editor.setText(group.getName()); } builder.setPositiveButton(android.R.string.ok, new OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { String text = editor.getText().toString().trim(); if (TextUtils.isEmpty(text)) { ViewUtils.showAlertToast(mainActivity, android.R.drawable.ic_dialog_alert, R.string.X_cannot_be_empty, mainActivity.getString(R.string.name)); return; } if (group != null) { BuddyGroup clone = ServiceUtils.cloneBuddyGroup(group); clone.setName(text); try { mainActivity.getCoreService().renameGroup(clone); } catch (RemoteException e) { mainActivity.onRemoteException(e); } } else { BuddyGroup group = new BuddyGroup(null, account.getProtocolUid(), account.getServiceId()); group.setName(text); try { mainActivity.getCoreService().addGroup(group); } catch (RemoteException e) { mainActivity.onRemoteException(e); } } dialog.dismiss(); } }); builder.setNegativeButton(android.R.string.cancel, new OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { dialog.dismiss(); } }); builder.setView(editor); showBrandedDialog(builder.create()); } private static boolean hasGroupsToMove(Buddy buddy, Account account) { for (BuddyGroup g : account.getBuddyGroupList()) { if (!g.getId().equals(ApiConstants.NO_GROUP_ID) && !g.getId().equals(ApiConstants.NOT_IN_LIST_GROUP_ID) && !g.getId().equals(buddy.getGroupId())) { return true; } } return false; } public static void showAcceptDeclineDialog(final Message message, Buddy buddy, final MainActivity activity) { AlertDialog.Builder builder = new AlertDialog.Builder(activity); builder.setCancelable(true); if (message instanceof FileMessage) { View view = LayoutInflater.from(activity).inflate(R.layout.file_transfer_accept_dialog, null); AQuery aq = new AQuery(view); ViewUtils.fillIcon(R.id.icon, aq, buddy.getFilename(), activity); aq.id(R.id.list).adapter(new FileTransferRequestAdapter(activity, ((FileMessage)message).getFiles())); aq.id(R.id.title).text(activity.getString(R.string.buddy_sends_files, buddy.getSafeName())); builder.setView(view); builder.setOnCancelListener(new OnCancelListener() { @Override public void onCancel(DialogInterface dialog) { sFileTransferDialogs.remove(message.getMessageId()); } }); } else { builder.setTitle(activity.getString(R.string.accept_dialog_header_format, buddy.getSafeName(), message.getContactDetail())); builder.setMessage(message.getText()); } builder.setPositiveButton(R.string.accept, new OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { try { activity.getCoreService().respondMessage(message, true); } catch (RemoteException e) { activity.onRemoteException(e); } dialog.dismiss(); } }); builder.setNegativeButton(R.string.decline, new OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { try { activity.getCoreService().respondMessage(message, false); } catch (RemoteException e) { activity.onRemoteException(e); } dialog.dismiss(); } }); Dialog d = builder.create(); sFileTransferDialogs.put(message.getMessageId(), d); showBrandedDialog(d); } }